package com.dong.es.anno;



import com.dong.es.entity.dtocast.DTOCastMethod;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 该注解与 {@link DTOCastMethod} 一起使用可以实现参数的转换
 * 使用该注解会调用 {@link DTOCastAnno#method()} 指定的类的
 * {@link DTOCastMethod#cast}
 * 方法，执行参数转换，方法的 args 参数以 field，paramFields，paramStrs的顺序填充
 *
 *
 *
 * @description: DTO转换方法注解
 * @author: 陈瑞东
 * @create: 2022-06-21 09:08
 */
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface DTOCastAnno {

    /**
     * 字段名
     */
    String field() default "";

    /**
     * 指定要作为参数的字段名
     * 会获取被指定字段当前的值作为参数
     */
    String[] paramFields() default {};

    /**
     * 指定要作为参数的值（排在paramField之后）
     * 直接作为参数的值
     */
    String[] paramStrs() default {};

    /**
     * 指定转换类型的方法
     */
    Class<? extends DTOCastMethod> method();

    /**
     * 排序（升序）
     */
    int sort() default 0;

    /**
     * 是否启用：
     *      如果为 true，则继续判断 enabledField 的值
     *      如果为 false，则不启用
     */
    boolean enabled() default true;

    /**
     * 是否启用（字段）
     *      如果不填写，则启用
     *      如果字段不为 Boolean 类型，则不启用
     *      如果字段值不为 true， 则不启用
     */
    String enabledField() default "";
}
